<?php

/**
 * Created by PhpStorm.
 * User: luanpeng
 * Date: 2017/2/7
 * Time: 18:25
 */
namespace app\index\validate;
use think\Validate;

class Base extends Validate
{
    //放置多模块的公共字段


    //------------------------------------
    //放置自定义的验证规则
    //------------------------------------
    /**
     * 必须是手机号码格式
     * @param $value
     * @param $data
     * @return bool|string
     */
    protected function phone($value,$data)
    {
        $rule = '/^1[3|4|5|7|8][0-9]\d{4,8}$/A';
        preg_match($rule,$value,$result);
        return $result?true:'手机号码格式不正确';
    }
    /**
     * 字段不填或必须为json数组
     * @param $value
     * @param $data
     * @return bool
     */
    protected function noOrJsonArray($value,$data){
        if(!$value){
            return true;
        }else{
            $jsonArray = json_decode($value);
            if($jsonArray){
                if(is_array($jsonArray)){
                    if(count($jsonArray) > 0){
                        return true;
                    }
                }
            }
            return false;
        }
    }
    /**
     * 验证手机号码
     */
    public function idCard($value,$data){
        // 只能是18位
        if(strlen($value)!=18){
            return false;
        }
        // 取出本体码
        $idCardBase = substr($value, 0, 17);
        // 取出校验码
        $verifyCode = substr($value, 17, 1);
        // 加权因子
        $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        // 校验码对应值
        $verifyCodeList = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
        // 根据前17位计算校验码
        $total = 0;
        for($i=0; $i<17; $i++){
            $total += substr($idCardBase, $i, 1)*$factor[$i];
        }
        // 取模
        $mod = $total % 11;
        // 比较校验码
        if($verifyCode == $verifyCodeList[$mod]){
            return true;
        }else{
            return false;
        }
    }
    /**
     * 验证必须是json对象
     */
    protected function JsonObj($value,$data){
        $jsonArray = json_decode($value);
        if($jsonArray){
            if(is_object($jsonArray)){
                if(count($jsonArray) > 0){
                    return true;
                }
            }
        }
        return false;
    }
    /**
     * 验证必须是json数组
     */
    protected function JsonArray($value,$data){
        $jsonArray = json_decode($value);
        if($jsonArray){
            if(is_array($jsonArray)){
                if(count($jsonArray) > 0){
                    return true;
                }
            }
        }
        return false;
    }
}